package models

import "github.com/mlogclub/simple/sqls"

// 聊天群组
type ChatGroups struct {
	ModelBase
	Name        string `gorm:"type:varchar(100); not null" json:"name" form:"name"`                                                    // 群组名称
	Avatar      string `gorm:"type:text" json:"avatar" form:"avatar"`                                                                  // 头像
	Introduce   string `gorm:"type:text" json:"introduce" form:"introduce"`                                                            // 介绍
	CreatedId   int64  `json:"createdId" form:"createdId" gorm:"column:created_id; type:int(11); default null; comment:创建人Id"`         // 创建人Id
	CreatedName string `json:"createdName" form:"createdName" gorm:"column:created_name; type:varchar(50); default null; comment:创建人"` // 创建人
	UpdatedId   int64  `json:"updatedId" form:"updatedId" gorm:"column:updated_id; type:int(11); default null; comment:修改人Id"`         // 修改人Id
	UpdatedName string `json:"updatedName" form:"updatedName" gorm:"column:updated_name; type:varchar(50); default null; comment:修改人"` // 修改人
}

func (ChatGroups) TableName() string {
	return "chat_groups"
}

// 聊天群组申请表
type ChatGroupsRequest struct {
	ModelBase
	SenderUserId int    `gorm:"not null" json:"senderUserId" form:"senderUserId"` // 发送用户id
	GroupId      int    `gorm:"not null" json:"groupId" form:"groupId"`           // 群组id
	Status       int    `gorm:"type:int(11);" json:"status" form:"status"`        // 状态 // 'sent', 'accepted', 'rejected', 'canceled'
	Message      string `gorm:"size:255" json:"message" form:"message"`           // 消息
}

func (ChatGroupsRequest) TableName() string {
	return "chat_groups_request"
}

// 聊天群租成员表
type ChatGroupsMembers struct {
	ModelBase
	GroupId   int64  `gorm:"not null" json:"groupId" form:"groupId"`     // 群组Id
	GroupName string `gorm:"size:255" json:"groupName" form:"groupName"` // 群角色
	UserId    int64  `gorm:"not null" json:"userId" form:"userId"`       // 用户Id
	RoleId    int    `gorm:"not null" json:"roleId" form:"roleId"`       // 角色Id
}

func (ChatGroupsMembers) TableName() string {
	return "chat_groups_members"
}

// 群组聊天消息
type ChatGroupsMessages struct {
	ModelBase
	GroupId    int    `gorm:"not null" json:"groupId" form:"groupId"`       // 群组Id
	SendUserId int    `gorm:"not null" json:"sendUserId" form:"sendUserId"` // 发送用户id
	Types      int    `gorm:"not null;default:0" json:"types" form:"types"` // 用户类型（0：文字、1：图片）
	Content    string `gorm:"type:text" json:"roles" form:"roles"`          // 内容
}

func (ChatGroupsMessages) TableName() string {
	return "chat_groups_messages"
}

// 群组聊天消息
type ChatGroupsMessagesListResponse struct {
	List   []ChatGroupsMessagesResponse `json:"list" form:"list"`
	Paging *sqls.Paging
}

// 群组聊天消息
type ChatGroupsMessagesResponse struct {
	ModelBase
	GroupId            int    `gorm:"column:group_id" json:"groupId" form:"groupId"`                                 // 群组Id
	SenderUserId       int64  `gorm:"column:send_user_id" json:"senderUserId" form:"senderUserId"`                   // 发送用户id
	SenderUserNickname string `gorm:"column:send_user_nickname" json:"senderUserNickname" form:"senderUserNickname"` // 发送用户
	SenderUserAvatar   string `gorm:"column:send_user_avatar" json:"senderUserAvatar" form:"senderUserAvatar"`       // 发送用户头像
	Types              int    `gorm:"column:types" json:"types" form:"types"`                                        // 消息类型
	Content            string `gorm:"column:content" json:"content" form:"content"`                                  // 消息
}

type ChatGroupsMembersUnreadMessage struct {
	ModelBase
	GroupId int64 `gorm:"not null" json:"groupId" form:"groupId"` // 群组Id
	UserId  int64 `gorm:"not null" json:"userId" form:"userId"`   // 用户Id
	UnRead  bool  `gorm:"not null" json:"unRead" form:"unRead"`   // 未读 false true
}

func (ChatGroupsMembersUnreadMessage) TableName() string {
	return "chat_groups_members_unread_message"
}

// 未读消息统计返回
type GroupMessageUnReadCountResponse struct {
	UserId      int    `gorm:"column:user_id" json:"userId" form:"userId"`
	GroupId     int    `gorm:"column:group_id" json:"groupId" form:"groupId"`
	GroupName   string `gorm:"column:group_name" json:"groupName" form:"groupName"`
	GroupAvatar string `gorm:"column:group_avatar" json:"groupAvatar" form:"groupAvatar"`
	UnRead      int    `gorm:"column:un_read" json:"unRead" form:"unRead"`
}
